﻿#include<iostream>
#include<vector>

using namespace std;

//使用快慢指针
//「快慢指针」有⼀个特性，就是在⼀个圆圈中，快指针总是会追上慢指针的，
// 也就是说他们总会相遇在⼀个位置上。
// 如果相遇位置的值是 1 ，那么这个数⼀定是快乐数；
// 如果相遇位置不是 1 的话，那么就不是快乐数

//先计算位数的平方，然后使用快慢指针。

class Solution {
public:
    int besqrt(int n)
    {
        int s = 0;
        while (n)
        {
            int t = n % 10;
            s += t * t;
            n /= 10;
        }
        return s;
    }
    bool isHappy(int n)
    {
        int slow = n, fast = besqrt(n);
        while (slow != fast)
        {
            slow = besqrt(slow);
            fast = besqrt(besqrt(fast));
        }
        return slow == 1;
    }
};